import json
import time

import requests
from datetime import datetime


#把当前电脑的年月日作为文件名称
def get_filename():
    return datetime.now().strftime("%Y_%m_%d_%H_%M_%S_%f")

if __name__=="__main__":
    try:
        word = input("请输入想要爬取的关键字：")
        page_size = int(input("请输入想要爬取的数量："))
        header = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
        }
        res_data = requests.get(f"https://image.baidu.com/search/"
                                "acjson?tn=resultjson_com&logid="
                                "11841132298417442601&ipn=rj&ct="
                                "201326592&is=&fp=result&fr=&"
                                f"word={word}&queryWord={word}&cl=2&lm=-1&"
                                "ie=utf-8&oe=utf-8&adpicid=&st=-1"
                                "&z=&ic=0&hd=&latest=&copyright=&s="
                                "&se=&tab=&width=&height=&face=0&"
                                "istype=2&qc=&nc=1&expermode=&nojc=&"
                                f"isAsync=&pn=30&rn={page_size}&gsm="
                                "1e0000000000001e&1664976774672=", headers=header)
        # 如果服务端返回的是字符串，就用text获取
        # 如果服务端返回的是二进制（图片，视频，音频等），就用content获取
        # print(res_data.text)
        # 解析JSON，拿到data里面的thumbURL，封装成一个字典形式
        # 字符串转化为字典
        res_dic = json.loads(res_data.text)
        i = 1
        for item in res_dic["data"]:
            # get的作用就是如果里面有thumbURL就获取视频地址，没有thumbURL就返回一个空
            # print(item["thumbURL"])会报错
            # 拿到图片地址
            img_url = item.get("thumbURL","")
            # 图片地址拿到之后
            # 先通过图片地址获取到图片数据(二进制数据所以用content)
            img_data = requests.get(img_url, headers=header).content
            # 将图片数据写入到本地文件路径
            # 写入二进制数据用wb : w=write b=二进制
            # 写入字符串就用w
            # with：f之后要关闭就相当于f.close
            # 吧文件名称搞成唯一的
            with open(f"imgs/{get_filename()}.jpg", "wb") as f:
                print(f"正在下载第{i}张图片")
                f.write(img_data)
                i+= 1  # 循环下载，下载完第一张下载第二张
                time.sleep(1)
    except Exception as e:
        pass




